﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Kaskelot.Services.Model;

namespace Stockholm.SOA.Kaskelot.WCF.ServiceImplementation.Mapping
{
	public static class LokalExtensions
	{
		public static DataContracts.Lokal ToContract(this Lokal entity)
		{
			DataContracts.Lokal b = new DataContracts.Lokal();

			CopyFromEntity(entity, b, false);

			return b;
		}

		public static DataContracts.Lokal ToMinimalContract(this Lokal entity)
		{
			DataContracts.Lokal b = new DataContracts.Lokal();

			CopyFromEntity(entity, b, true);

			return b;
		}

		public static Lokal ToEntity(this DataContracts.Lokal b)
		{
			Lokal entity = new Lokal();

			CopyToEntity(b, entity);

			return entity;
		}

		public static void UpdateEntity(this Lokal entity, DataContracts.Lokal b)
		{
			CopyToEntity(b, entity);
		}

		private static void CopyFromEntity(Lokal from, DataContracts.Lokal to, bool minimal)
		{
			to.Id = from.Id;
			to.ValId = from.ValId;
			to.Namn = from.Benamning;
			to.ValdistriktId = from.ValdistriktId;
			to.ByggnadId = from.ByggnadId;

			to.Inaktiv = from.Inaktiv;

			to.Andrad = from.Andrad;
			to.AndradAv = from.AndradAv;
			to.Skapad = from.Skapad;
			to.SkapadAv = from.SkapadAv;

			if (from.Byggnad != null)
				to.ByggnadNamn = from.Byggnad.Benamning;

			if (from.Valdistrikt != null)
				to.ValdistriktNamn = from.Valdistrikt.Forsamling != null ? from.Valdistrikt.Forsamling.Benamning + " " + from.Valdistrikt.ValdistriktNr : String.Empty;

			if (minimal) return;

			if(from.Valdistrikt != null)
				to.Valdistrikt = from.Valdistrikt.ToMinimalContract();

			to.Byggnad = from.Byggnad.ToMinimalContract();
		}

		private static void CopyToEntity(DataContracts.Lokal from, Lokal to)
		{
			to.Id = from.Id;
			to.ValId = from.ValId;
			to.Benamning = from.Namn;
			to.Inaktiv = from.Inaktiv;

			to.Andrad = from.Andrad;
			to.AndradAv = from.AndradAv;
			to.Skapad = from.Skapad;
			to.SkapadAv = from.SkapadAv;

			to.ValdistriktId = from.ValdistriktId;
			to.ByggnadId = from.ByggnadId;
		}
	}
}
